package com.sky.service.impl;

import java.time.LocalDateTime;
import java.util.List;

import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.sky.context.BaseContext;
import com.sky.dto.ShoppingCartDTO;
import com.sky.entity.Dish;
import com.sky.entity.Setmeal;
import com.sky.entity.ShoppingCart;
import com.sky.mapper.DishMapper;
import com.sky.mapper.SetmealMapper;
import com.sky.mapper.ShoppingCartMapper;
import com.sky.service.ShoppingCartService;
@Service
public class ShoppingCartServiceImp implements ShoppingCartService {

	 @Autowired
	    private ShoppingCartMapper shoppingCartMapper;
	    @Autowired
	    private DishMapper dishMapper;
	    @Autowired
	    private SetmealMapper setmealMapper;
	    
	    /**
	     * 添加购物车
	     *
	     * @param shoppingCartDTO
	     */
	    public void addShoppingCart(ShoppingCartDTO shoppingCartDTO) {
	        ShoppingCart shoppingCart = new ShoppingCart();
	        BeanUtils.copyProperties(shoppingCartDTO, shoppingCart);
	        //只能查询自己的购物车数据
	        shoppingCart.setUserId(BaseContext.getCurrentId());

	        //判断当前商品是否在购物车中
	        List<ShoppingCart> shoppingCartList = shoppingCartMapper.list(shoppingCart);

	        if (shoppingCartList != null && shoppingCartList.size() == 1) {
	            //如果已经存在，就更新数量，数量加1
	            shoppingCart = shoppingCartList.get(0);
	            shoppingCart.setNumber(shoppingCart.getNumber() + 1);
	            shoppingCartMapper.updateNumberById(shoppingCart);
	        } else {
	            //如果不存在，插入数据，数量就是1

	            //判断当前添加到购物车的是菜品还是套餐
	            Long dishId = shoppingCartDTO.getDishId();
	            if (dishId != null) {
	                //添加到购物车的是菜品
	                Dish dish = dishMapper.getById(dishId);
	                shoppingCart.setName(dish.getName());
	                shoppingCart.setImage(dish.getImage());
	                shoppingCart.setAmount(dish.getPrice());
	            } else {
	                //添加到购物车的是套餐
	                Setmeal setmeal = setmealMapper.GetById(shoppingCartDTO.getSetmealId());
	                shoppingCart.setName(setmeal.getName());
	                shoppingCart.setImage(setmeal.getImage());
	                shoppingCart.setAmount(setmeal.getPrice());
	            }
	            shoppingCart.setNumber(1);
	            shoppingCart.setCreateTime(LocalDateTime.now());
	            shoppingCartMapper.insert(shoppingCart);
	        }
	    }

		@Override
		public List<ShoppingCart> showShoppingCart() {
			// TODO 自动生成的方法存根
			return shoppingCartMapper.list(ShoppingCart.
                    builder().
                    userId(BaseContext.getCurrentId()).
                    build());
		}

		@Override
		public void cleanshopping() {
			// TODO 自动生成的方法存根
			//首先就是获取user_id
			Long user_id = BaseContext.getCurrentId();
			//对user_id的所有表进行删除
			shoppingCartMapper.cleanlist(user_id);
		}

		@Override
		public void sub(ShoppingCartDTO shoppingCartDTO) {
			// TODO 自动生成的方法存根
			//首先这个物品肯定是存在的，我们要判断这是哪一个：套餐/菜品
			Long dishId = shoppingCartDTO.getDishId();
			ShoppingCart sc = new ShoppingCart();
			//构建一个ShoppingCart对象
			BeanUtils.copyProperties(shoppingCartDTO, sc);
			sc.setUserId(BaseContext.getCurrentId());
			//获取该状态下的对象
			List<ShoppingCart> list = shoppingCartMapper.list(sc);
			//第一个对象应该就是我们要找到
			if(list!=null&&list.size()>0)
			{
				ShoppingCart scart = list.get(0);
				int numbers  = scart.getNumber();
				if(numbers==1)
				{
					//将该表进行删除
					shoppingCartMapper.deleteById(scart);
				}else {
					//将那个number进行修改即可
					scart.setNumber(scart.getNumber()-1);
					shoppingCartMapper.updateNumberById(scart);
				}
			}
		
		}

}
